#include <stdio.h>
#include "nstar_light_glint.h"

#define GpioSet_DVB(n) do{}while(0)
#define GpioSet_RADIO(n) do{}while(0)

#define NSTAR_GPIO_PIN_LED1_RED 		0	//电源双色灯1_大红灯
#define NSTAR_GPIO_PIN_LED1_GREED 		1	//电源双色灯1_大绿灯
#define NSTAR_GPIO_PIN_LED2     		3 	//信号灯，小绿灯

static volatile unsigned char led1_mode=0;
static volatile unsigned char led2_mode=0;

static volatile unsigned char led1_reg=0;
static volatile unsigned char led2_reg=0;


//GB89 95B定义
/*
电源指示灯
-0 灭，电源异常
-1 绿色 ，电源正常，与服务器连接正常
-2 红色 ，电源正常，与服务器连接错误

信号指示灯
-0 灭，待机
-1 绿色常亮，正常广播中
-2 绿色闪烁，收到开播指令，但是没有收到音频数据
*/

//GB89 96F0定义
/*
电源指示灯
-0 灭，电源异常
-1 亮，电源正常，

播放指示灯(绿色)
-0 灭，与服务器连接错误
-1 常亮，与服务器连接正常，广播中
-2 闪烁，与服务器连接正常，未开播


调频指示灯(蓝色)
-0 灭，调频异常或者未安装
-1 常亮，调频正常，广播中
-2 闪烁，调频正常，待机中

*/

void led_ip_work_idle(void)
{
	led1_mode=0;
}

void led_ip_work_on(void)
{
	led1_mode=1;
}

void led_ip_work_blink(void)
{
	led1_mode=2;
}


void led_fm_work_idle(void)
{
	led2_mode=0;
}

void led_fm_work_on(void)
{
	led2_mode=1;
}

void led_fm_work_blink(void)
{
	led2_mode=2;
}

static void led1_off(void)
{
	led1_reg= 0;
}

static void led1_on(void)
{
	led1_reg= 1;
}

static void led1_blink(void)
{
	static unsigned char cnt=0;
	if((cnt++) %5 ==0){
		led1_on();
	}
	else{
		led1_off();
	}
}


static void led2_off(void)
{
	led2_reg= 0;
}

static void led2_on(void)
{
	led2_reg= 1;
}

static void led2_blink(void)
{
	static unsigned char cnt=0;
	if((cnt++) %5 ==0){
		led2_on();
	}
	else{
		led2_off();
	}
}

static void led_reg_handle(void)
{
	switch(led1_mode){
		case 1:
			led1_on();
			break;
		case 2:
			led1_blink();
			break;
		default:
			led1_off();
			break;
	}
	switch(led2_mode){
		case 1:
			led2_on();
			break;
		case 2:
			led2_blink();
			break;
		default:
			led2_off();
			break;
	}
}

static void board_glight(unsigned char reg1, unsigned char reg2)
{
    GpioSet_DVB(reg1);
    GpioSet_RADIO(reg2);
}

static void led_light_handle(void)
{
	static unsigned char last_reg1=0, last_reg2=0;
	unsigned char currnt_reg1;
	unsigned char currnt_reg2;

	led_reg_handle();
	
	currnt_reg1= led1_reg;
	currnt_reg2= led2_reg;

	if(currnt_reg1 != last_reg1 || currnt_reg2 != last_reg2){
		board_glight(currnt_reg1, currnt_reg2);
	}
	
	last_reg1= currnt_reg1;
	last_reg2= currnt_reg2;
}


void nstar_light_glint_init(void)
{
	led1_mode=0;
	led2_mode=0;
	led_light_handle();
}

void nstar_light_glint_loop(void)
{
	static unsigned int cnt=0;
	if((cnt++)%10 == 0)
		led_light_handle();
}










